/*
 * 文件名：BeanFactory.java
 * 版权：Copyright by www.wootide.com
 * 描述：
 * 修改人：qianfm
 * 修改时间：Sep 24, 2012
 * 跟踪单号：
 * 修改单号：
 * 修改内容：
 */
package com.wootide.cms.common.manager;

import org.springframework.context.ApplicationContext;
import org.springframework.web.context.WebApplicationContext;

/**
 * 〈bean 工厂〉
 * 〈功能详细描述〉
 * @author qianfm
 * @version Sep 24, 2012
 * @see BeanFactory
 * @since
 */

public class BeanFactory
{
    
    /**
     * spring的上下文.
     */
    private static ApplicationContext context;
    
    /**
     * 初始化spring的上下文. 
     * 该方法可以不调用，如果不使用此方法初始化，则需要通过configFile.properties
     * 来指定配置文件
     * 
     * @param configFiles {@link String}... 配置文件绝对路径
     * @throws Exception 异常
     */
    public static void init(WebApplicationContext webContext) throws Exception
    {
        context = webContext;
    }
    
    /**
     * try to load spring xml files from classpath.
     * @param springClasspathResources 例如spring-*.xml
     * @throws Exception
     */
    public static void initByClassPaths(String... springClasspathResources)
            throws Exception
    {
        if (context == null)
        {
            context = Configurator.configSpringByClassPath(springClasspathResources);
        }
    }
    
    /**
     * 根据名称（id）获得一个spring的bean实例.
     * 
     * @param name {@link String} bean的名称或id
     * @return {@link Object} spring的bean实例
     * @throws Exception 异常
     */
    public static Object getBean(String name) throws Exception
    {
        if (context == null)
        {
            // loadContext();
            throw new NullPointerException(
                    "spring context hasn't been initialized");
        }
        return context.getBean(name);
    }
    
}
